package com.itrip.itriosearch.util;

import com.itrip.itriosearch.entity.Mail;

import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Date;
import java.util.Properties;
import javax.mail.Session;
import javax.mail.Transport;
import java.util.ArrayList;
import java.util.List;

/**
 * @author: 罗坤
 * @description: 邮箱工具类
 * @date: 2020/3/3 16:53
 */
public class  MailSendUtil {
    //    smtp服务器
    private String host="smtp.qq.com";

    //    发送人邮箱
    public  String sendMail="3093546660@qq.com";

    //	  发送人昵称
    private String sendName="罗坤";

    //    发送邮箱密码
    private String pwd="txwixjvmemzadhaj";

    //    发送人地址
    private String from="******@qq.com";



//    邮件发送统一管理

    public List<String> SendMailMessage(List<Mail> mailList)throws Exception{
        List<String> messages=new ArrayList<String>();
        for(Mail mail:mailList){
            sendMail(mail);
        }
        return messages;

    }
    //    发送邮件接口
    public void sendMail(Mail receiveMail) throws Exception{

        // 1. 创建参数配置, 用于连接邮件服务器的参数配置
        Properties props = new Properties();                    // 参数配置
        props.setProperty("mail.transport.protocol", "smtp");   // 使用的协议（JavaMail规范要求）
        props.setProperty("mail.smtp.host", host);   // 发件人的邮箱的 SMTP 服务器地址
        props.setProperty("mail.smtp.auth", "true");            // 需要请求认证

        final String smtpPort = "465";
        props.setProperty("mail.smtp.port", smtpPort);
        props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.setProperty("mail.smtp.socketFactory.fallback", "false");
        props.setProperty("mail.smtp.socketFactory.port", smtpPort);


        // 2. 根据配置创建会话对象, 用于和邮件服务器交互
        Session session = Session.getDefaultInstance(props);
        session.setDebug(true);                                 // 设置为debug模式, 可以查看详细的发送 log

        // 3. 创建一封邮件
        MimeMessage message = createMessage(session,receiveMail);

        // 4. 根据 Session 获取邮件传输对象
        Transport transport = session.getTransport();

        // 5. 使用 邮箱账号 和 密码 连接邮件服务器, 这里认证的邮箱必须与 message 中的发件人邮箱一致, 否则报错

        transport.connect(sendMail, pwd);

        // 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
        transport.sendMessage(message, message.getAllRecipients());

        // 7. 关闭连接
        transport.close();

    }


    /**
     *
     * 功能描述: 创建邮件（不抄送）
     *
     * @param:
     * @return:
     * @auther:
     * @date:
     */
    private MimeMessage createMessage(Session session, Mail mail) throws Exception {
        // 1. 创建一封邮件
        MimeMessage message = new MimeMessage(session);
        // 2. From: 发件人
        message.setFrom(new InternetAddress(sendMail, sendName, "UTF-8"));
        // 3. To: 收件人（可以增加多个收件人、抄送、密送）
        message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(mail.getMail(), mail.getName(), "UTF-8"));
        // 4. Subject: 邮件主题
        message.setSubject(mail.getTheme(), "UTF-8");
        // 5. Content: 邮件正文（可以使用html标签）
        message.setContent(mail.getTemplate() ,"text/html;charset=UTF-8");
        // 6. 设置发件时间
        if(mail.getDate()!=null){
            message.setSentDate(mail.getDate());
        }else{
            message.setSentDate(new Date());
        }
        // 7. 保存设置
        message.saveChanges();

        return message;
    }

}
